1. Field of the Invention
The invention relates generally to Serial Attached SCSI (SAS) systems, and more specifically relates to SAS expanders.
2. Discussion of Related Art
In SAS domains (i.e., electronic systems implementing a switched SAS fabric) it is common for a SAS initiator to communicate with a large number of SAS or Serial Advanced Technology Attachment (SATA) end devices. The end devices may comprise, for example, SAS/SATA storage devices that provision one or more logical volumes of data. In a SAS domain, the end devices may be coupled for communication with the initiator via one or more SAS expanders. The SAS expanders serve to establish switched temporary communication channels between the initiator and the various storage devices.
Each SAS expander includes multiple physical links with associated transceivers (PHYs). The PHYs are used to define SAS ports. For example, a SAS port made from a single PHY is referred to as a narrow port, while SAS ports that comprise multiple PHYs are referred to as wide ports.
When a SAS expander is first initialized (e.g., during discovery), each port of the expander has its routing attributes (i.e., the routing attributes of each of its PHYs) configured by an outside source. A routing attribute defines how the SAS expander decides to route incoming requests to establish communications between SAS devices. An example of such a request is an OPEN Address Frame (OAF). The routing attributes may be defined as “subtractive,” “table,” or “direct.”
Direct routing is used when a PHY is directly coupled with an end device (e.g., a storage device). The SAS expander is made aware of the end device during discovery. Thus, when an incoming request indicates the SAS address of the end device, the SAS expander may immediately establish connections with the end device using the port that is directly coupled with the device.
Table routing is used by a SAS expander when a port is coupled with a known set of SAS addresses (e.g., coupled with multiple devices via one or more expanders). A routing table is kept in memory and associated with the ports that have been set to table routing. The routing table indicates the SAS addresses that are available via the various table routing ports. When an incoming request is received that requests one of those SAS addresses, the appropriate port is used to forward the request.
Subtractive routing is used to define a “port of last resort.” A port with a subtractive routing attribute is used whenever a requested SAS address is not identified in a routing table at the expander and is not directly connected to the SAS expander. Ideally, there will be only one subtractive routing port per expander.
As normally implemented, routing attributes are configured manually by a systems engineer, typically using a configuration tool on a management system coupled with the expander. This is a time-consuming process, and can create problems if the SAS domain is not properly configured (i.e., due to human error). For example, if two ports that are coupled to each other each use subtractive routing, then incoming requests could potentially bounce between those two ports in an infinite loop. This may cause system instabilities, and may prevent complete discovery of the SAS domain.
In further systems, a SAS initiator may coordinate and manage the configuration of routing attributes of SAS expanders by discovering each SAS expander and programming the routing attributes each individual port of each expander. However, this is also a time-consuming process for the initiator that occupies a great deal of processing power and bandwidth at the SAS domain, because the initiator must communicate with each end device and expander of the domain.
Thus it is an ongoing challenge to configure the routing attributes of ports of SAS expanders in an efficient manner.